////============================================================================
//// Name        : TetragnathaAlfa.cpp
//// Author      : Baggio e MC
//// Version     :
//// Copyright   : Your copyright notice
//// Description : Hello World in C++, Ansi-style
////============================================================================
//#include <iostream>
//#include <fstream>
//#include <queue>
//#include <list>
//#include <sstream>
//
//#include "./classes_dados/Hasher.h"
//#include "./classes_dados/ArquivoParser.h"
//#include "./classes_dados/Repository.h"
//#include "./classes_dados/Berthier.h"
//
//#include "./classes_net/DownloadBeta.h"
//#include "./classes_net/URL.h"
//#include "./classes_net/Manager.h"
//
//#include "./classes_logger/DebugLogger.h"
//
//
////#include "./classes_teste/kbhit.h"
//
//using namespace std;
//
//
//int main_old() {
//	cout << "Programa Tetragnata - Web Crawler : Alfa " << endl; 
////-----------------------------------------------------------------------------	
//	DownloadBeta downloader;
//	Repository repository;
//	
//	DebugLogger dbug_downloader("dbug_downloader");
//	DebugLogger dbug_repository("dbug_repository");
//	DebugLogger dbug_historyLinks("dbug_historyLinks");
//	
//	//Desabilita loggers
//	dbug_repository.disable(DebugLogger::info);
//    dbug_downloader.enable(DebugLogger::info + DebugLogger::alert + DebugLogger::error);
//    dbug_historyLinks.enable(DebugLogger::info + DebugLogger::alert + DebugLogger::error);
//    
//	int tempoTemp = 0;
//	
////	string site_url = "www.google.com.br/";
////	string site_url = "http://www.pudim.com.br/";
////	string site_url = "http://www.superdownloads.com.br/";
////	string site_url ="http://www.centraldoslinks.com/";
////	string site_url ="http://www.ufmg.br/";
//	
//	list<string> site_url_init;
//	string site_url;
//	
//	site_url_init.push_back("http://www.superdownloads.com.br/");
//	site_url_init.push_back("http://www.terra.com.br/");
//	site_url_init.push_back("http://www.uol.com.br/");
//	site_url_init.push_back("http://www.globo.com/");
//	site_url_init.push_back("http://www.ufmg.br/");
//	
//	list<string> newPagesBuffer;
//	std::list<URL> canonico_links;
//	string buffer_page;
//		
//	//Inicia repositorio com lista inicial
//	while(!site_url_init.empty()){
//		
//		site_url = site_url_init.front();
//		site_url_init.pop_front();
//		
//		//copia pagina e armazena no repositorio
//		downloader.setURL(site_url);
////		buffer_page = downloader.getPage();
////		dbug_repository.infoMsg(downloader.getHeader()); // grava header
//		repository.store(site_url, buffer_page);
//		newPagesBuffer.push_back(site_url);
//		
//	}
//	
//	
////	char char_t;
////	while(char_t != 's'){
////		char_t = kb_getc();
////		cout << "To aqui !!"<< endl;
////	}
//	
//	//LOOP
//	while(repository.size() < 10000){	
//		
//		while( ! newPagesBuffer.empty()){
//			site_url = newPagesBuffer.front();
//			newPagesBuffer.pop_front();
//			//passa pagina para parser
//			ArquivoParser siteParser(site_url, repository.getPage(site_url));
//			if(siteParser.error_status() == -1){
//				cout << "Erro ao abrir arquivos... " << endl;
//				return -1;
//			}
//			//Retira links canonicos do Parser+Normalizador
//			canonico_links = siteParser.get_links();
//			
//		// Imprime lista URL
//		//	cout << endl << endl;
//		//	for(int i=0; i < canonico_links.size(); i++){	
//		//	    cout << canonico_links.front().get_dominio() << canonico_links.front().get_path() << endl;
//		//	    canonico_links.push_back(canonico_links.front());
//		//	    canonico_links.pop_front();
//		//	}
//			//Coloca links no Frontier
//		    Berthier::adicionaURLs(canonico_links);
//		}
//	    
//	    queue<URL> urlQueue = Berthier::getURLQueue();
//	    Berthier::clearURLQueue();
//	    
//	    cout << urlQueue.front().get_dominio() << urlQueue.front().get_path() << endl;
//		list <URL> lista_url;
//	
//		cout << "Novos Links do Berthier: " << urlQueue.size() << endl;
//		
//		//funcao de GlueLogic
//		for(int i=0; i<urlQueue.size(); i++){
//			lista_url.push_back(urlQueue.front());
//			urlQueue.push(urlQueue.front());
//			urlQueue.pop();
//		}
//		
//	    Manager manager;
//	    manager.setList(lista_url);
//	    manager.populateDictionaryMap();
//	//  imprime dicionario
//	//  manager.printDictionaryMapInfo();	
//	    manager.populateWaitList();
//	    manager.populateReadyList();
//	    
//	    URL simpleURL;
//	    simpleURL = manager.getNextReadyURL();
//		time_t now_d;
//		time(&now_d);
//		
//		if(tempoTemp <= 12) tempoTemp++;
//		
//		int maxTime = 80*tempoTemp + now_d;
//		int a = 0;
//		
//		while (maxTime >= now_d) {
//			
//			manager.populateWaitList();
//			manager.populateReadyList();
//			simpleURL = manager.getNextReadyURL();
//			if (simpleURL.isValid()) {
//				cout << "Proxima: " << simpleURL.get_dominio() << simpleURL.get_path() << endl;
//				cout << "   Total: " << ++a << " links " << endl;
//				string site_novo = simpleURL.get_protocol() + simpleURL.get_dominio() + simpleURL.get_path();
//				
//				downloader.setURL(site_novo);
//				std::stringstream outTemp_now;
//				outTemp_now << now_d;
//				dbug_historyLinks.alertMsg(outTemp_now.str() + ": " + site_novo);
//				
//				//copia pagina e armazena no repositorio
//				string buffer_page_novo;
////				buffer_page_novo = downloader.getPage();
////				dbug_repository.infoMsg(downloader.getHeader()); // grava header
//				repository.store(site_novo, buffer_page_novo);
//				newPagesBuffer.push_back(site_novo);
//				manager.updateDomain(simpleURL.get_dominio());
//			}
//			time(&now_d);			
//		}
//		
//		cout << endl << endl;
//		string tempStr = "Total de pagina copiadas: ";
//		std::stringstream outTemp;
//		outTemp << repository.size();
//		tempStr = tempStr + outTemp.str();
//		cout << tempStr << endl;
//		dbug_repository.alertMsg(tempStr);
//		
//	}
//	
//	cout << endl << "Fim !" << endl;    
//	return 0;
//}
